home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / systracker_src / src / st_gui.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-02-28  |  20.1 KB  |  659 lines

  1. /***************************************************************************/
  2. /* st_gui.c - GUI (MUI) control module.                                    */
  3. /*                                                                         */
  4. /* Copyright © 1999-2000 Andrew Bell. All rights reserved.                 */
  5. /***************************************************************************/
  6.  
  7. /* Note: Different GUI systems might be supported in the future so
  8.          I'm encapsulating all MUI specifics into this module. */
  9.  
  10. #include "SysTracker_rev.h"
  11. #include "st_include.h"
  12. #include "st_protos.h"
  13. #include "st_strings.h"
  14.  
  15. #include <mui/nlist_mcc.h>
  16. #include <mui/nlistview_mcc.h>
  17.  
  18. /***************************************************************************/
  19. /* Data and defines */
  20. /***************************************************************************/
  21.  
  22. struct Library *MUIMasterBase = NULL;
  23.  
  24. Object *SysTrkApp = NULL;
  25. Object *Objs[OID_AMOUNT];
  26. Object *MenuStrip = NULL;
  27. struct FileRequester *SaveReq = NULL;
  28.  
  29. static UBYTE *TrkModeEntries[] = 
  30. {
  31.   "Libraries", "Devices", "Fonts", "Locks", "Opened files", NULL
  32. };
  33.  
  34. struct NewMenu MainMenuData[] =
  35. {
  36.   nmTitle("Project")
  37.  
  38.   nmItem("About...",
  39.    "a", 0, OID_MAIN_MENU_PROJECT_ABOUT)
  40.  
  41.   nmItem("About MUI...",
  42.     "m", 0, OID_MAIN_MENU_PROJECT_ABOUT_MUI)
  43.  
  44.   nmBar
  45.  
  46.   nmItem("Settings MUI...",
  47.     "e", 0, OID_MAIN_MENU_PROJECT_SETTINGS_MUI) 
  48.  
  49.   nmBar
  50.  
  51.   nmItem("Hide",
  52.     "h", 0, OID_MAIN_MENU_PROJECT_HIDE)
  53.  
  54.   nmItem("Quit",
  55.     "q", 0, OID_MAIN_MENU_PROJECT_QUIT)
  56.  
  57.  
  58.   nmTitle("Control")
  59.  
  60.   nmItem("Reset SysTracker",
  61.     "r", 0, OID_MAIN_MENU_CONTROL_RESET)
  62.  
  63.   nmItem("Clear dead applications",
  64.     "c", 0, OID_MAIN_MENU_CONTROL_CLEARDEADAPPS)
  65.  
  66.   nmItem("Clear unused resources",
  67.     "u", 0, OID_MAIN_MENU_CONTROL_CLEARUNUSEDRES)
  68.  
  69.   nmBar 
  70.  
  71.   nmItem("Track unused resources",
  72.     NULL, (CHECKIT|MENUTOGGLE), OID_MAIN_MENU_CONTROL_TRACKUNUSEDRES)
  73.  
  74.   nmItem("Show unused resources",
  75.     NULL, (CHECKIT|MENUTOGGLE), OID_MAIN_MENU_CONTROL_SHOWUNUSEDRES)
  76.  
  77.   nmEnd
  78. };
  79.  
  80. /***************************************************************************/
  81.  
  82. GPROTO BOOL GUI_InitMUI( void )
  83. {
  84.   /*********************************************************************
  85.    *
  86.    * GUI_InitMUI()
  87.    *
  88.    * Setup the GUI basics. This includes opening muimaster.library and
  89.    * creating the file requesters, etc.
  90.    *
  91.    *********************************************************************
  92.    *
  93.    */
  94.  
  95.   if (!(MUIMasterBase = OpenLibrary(MUIMASTER_NAME, MUIMASTER_VLATEST)))
  96.   {
  97.     ULONG Fmt[] = { (ULONG) MUIMASTER_NAME, MUIMASTER_VLATEST };
  98.  
  99.     M_PrgError(STR_Get(SID_I_NEED_LIB), &Fmt);    
  100.     return FALSE;
  101.   }
  102.  
  103.   SaveReq = MUI_AllocAslRequestTags(ASL_FileRequest,
  104.               ASLFR_TitleText,      STR_Get(SID_SAVE_AS_ASCII),
  105.               ASLFR_PositiveText,   STR_Get(SID_SAVE),
  106.               ASLFR_NegativeText,   STR_Get(SID_QUIT),
  107.               ASLFR_InitialTopEdge, 0,
  108.               ASLFR_InitialHeight,  512,
  109.               ASLFR_InitialFile,    "SysTracker_output.txt",
  110.               ASLFR_InitialDrawer,  "Ram:",             
  111.               ASLFR_Flags1,         (FRF_DOSAVEMODE),
  112.               ASLFR_Flags2,         (FRF_REJECTICONS),
  113.               TAG_DONE);
  114.  
  115.   if (!SaveReq) return FALSE;
  116.  
  117.   return TRUE;
  118. }
  119.  
  120. GPROTO void GUI_EndMUI( void )
  121. {
  122.   /*********************************************************************
  123.    *
  124.    * GUI_EndMUI()
  125.    *
  126.    * Free the resources allocated by GUI_InitMUI().
  127.    *
  128.    *********************************************************************
  129.    *
  130.    */
  131.  
  132.   if (SaveReq)
  133.   {
  134.     MUI_FreeAslRequest(SaveReq); SaveReq = NULL;
  135.   }
  136.  
  137.   if (MUIMasterBase)
  138.   {
  139.     CloseLibrary(MUIMasterBase); MUIMasterBase = NULL;
  140.   }
  141. }
  142.  
  143. struct Process *GUIProcess = NULL;
  144.  
  145. GPROTO BOOL GUI_Construct( void )
  146. {
  147.   /*********************************************************************
  148.    *
  149.    * GUI_Construct()
  150.    *
  151.    * Construct the entire GUI.
  152.    *
  153.    * Note: This routine should return FALSE if SysTracker is already
  154.    *       running. It should also signal the other SysTracker to bring
  155.    *       it's GUI to front. At the moment, MUI handles this for us.
  156.    *
  157.    *
  158.    *********************************************************************
  159.    *
  160.    */
  161.  
  162.   extern struct Hook ARTL_AppListMakeHook;
  163.   extern struct Hook ARTL_AppListKillHook;
  164.   extern struct Hook ARTL_AppListShowHook;
  165.   extern struct Hook ARTL_AppListSortHook;
  166.   extern struct Hook ARTL_TrackerListMakeHook;
  167.   extern struct Hook ARTL_TrackerListKillHook;
  168.   extern struct Hook ARTL_TrackerListShowHook;
  169.   extern struct Hook ARTL_TrackerListSortHook;
  170.  
  171.   GUIProcess = (struct Process *) FindTask(NULL);
  172.  
  173.   /* Application */
  174.  
  175.   SysTrkApp = (APTR) ApplicationObject,
  176.     MUIA_Application_Title,       "SysTracker",
  177.     MUIA_Application_Version,     "$VER: " VERS " (" DATE ")",
  178.     MUIA_Application_Copyright,   "Copyright © " YEAR " Andrew Bell",
  179.     MUIA_Application_Author,      "Andrew Bell",
  180.     MUIA_Application_Description, STR_Get(SID_SYSTEM_RESOURCE_TRACKER),
  181.     MUIA_Application_Base,        "SYSTRACKER",
  182.     MUIA_Application_SingleTask,  TRUE,
  183.     SubWindow, Objs[OID_MAIN_WINDOW] = (APTR) WindowObject,
  184.       MUIA_Window_ScreenTitle, VERS,
  185.       MUIA_Window_Title,       VERS " Copyright © " YEAR " Andrew Bell.",
  186.       MUIA_Window_Menustrip,   MenuStrip = MUI_MakeObject(MUIO_MenustripNM, MainMenuData, 0),
  187.       MUIA_Window_ID,          MAKE_ID('M','A','I','N'),
  188.       MUIA_Window_Width,       MUIV_Window_Width_Visible(80),
  189.       MUIA_Window_Height,      MUIV_Window_Height_Visible(80),
  190.       WindowContents, VGroup,
  191.         Child, HGroup,
  192.           Child, Objs[OID_MAIN_APPLISTVIEW] = NListviewObject,
  193.             MUIA_ShortHelp,            STR_Get(SID_SHORTHELP_APPLIST),
  194.             MUIA_NListview_NList,       Objs[OID_MAIN_APPLIST] = NListObject,
  195.               MUIA_ObjectID,            MAKE_ID('A','P','P','L'),
  196.               MUIA_NList_Input,         TRUE,
  197.               MUIA_NList_MultiSelect,   MUIV_NList_MultiSelect_None,
  198.               MUIA_NList_Format,        "MIW=50 BAR,MIW=20 BAR,MIW=20",
  199.               MUIA_NList_Active,        MUIV_NList_Active_Top,
  200.               MUIA_NList_Title,         TRUE,
  201.               MUIA_NList_AutoVisible,   TRUE,
  202.               MUIA_NList_ConstructHook, &ARTL_AppListMakeHook,
  203.               MUIA_NList_DestructHook,  &ARTL_AppListKillHook,
  204.               MUIA_NList_DisplayHook,   &ARTL_AppListShowHook,
  205.               MUIA_NList_CompareHook,   &ARTL_AppListSortHook,
  206.             End,  
  207.           End,  /* Listview object */
  208.           Child, BalanceObject, End,
  209.           Child, VGroup,
  210.             Child, Objs[OID_MAIN_TRACKERLISTVIEW] = NListviewObject,
  211.               MUIA_ShortHelp,            STR_Get(SID_SHORTHELP_TRACKERLIST),
  212.               MUIA_NListview_NList,      Objs[OID_MAIN_TRACKERLIST] = NListObject,
  213.                 MUIA_NList_MultiSelect,  MUIV_NList_MultiSelect_None,
  214.                 MUIA_NList_Input,        TRUE,
  215.                 MUIA_ObjectID,            MAKE_ID('T','R','K','L'),
  216.                 MUIA_NList_Format,        "BAR,BAR,",
  217.                 MUIA_NList_Active,        MUIV_NList_Active_Top,
  218.                 MUIA_NList_Title,         TRUE,
  219.                 MUIA_NList_AutoVisible,   TRUE,
  220.                 MUIA_NList_ConstructHook, &ARTL_TrackerListMakeHook,
  221.                 MUIA_NList_DestructHook,  &ARTL_TrackerListKillHook,
  222.                 MUIA_NList_DisplayHook,   &ARTL_TrackerListShowHook,
  223.                 MUIA_NList_CompareHook,   &ARTL_TrackerListSortHook,
  224.               End,  
  225.             End,  /* NListview object */
  226.             Child, HGroup,
  227.               Child, KeyLabel(STR_Get(SID_TRACK_MODE), 'm'),
  228.               Child, Objs[OID_MAIN_TRKMODE] = CycleObject,
  229.                 MUIA_Cycle_Entries, TrkModeEntries,
  230.                 MUIA_Cycle_Active,  0,
  231.                 MUIA_ShortHelp,     STR_Get(SID_SHORTHELP_TRACK_MODE),
  232.                 MUIA_ControlChar,   'v',
  233.               End,
  234.             End,
  235.           End,
  236.         End,
  237.         Child, HGroup,
  238.           Child, Objs[OID_MAIN_SAVE]     = MyKeyButton(STR_Get(SID_SAVE),'s', STR_Get(SID_SHORTHELP_SAVE)),
  239.           Child, Objs[OID_MAIN_UPDATE]   = MyKeyButton(STR_Get(SID_UPDATE),'u', STR_Get(SID_SHORTHELP_UPDATE)),
  240.           Child, Objs[OID_MAIN_QUIT]     = MyKeyButton(STR_Get(SID_QUIT), 'q', STR_Get(SID_SHORTHELP_QUIT)),
  241.         End,
  242.       End,  /* MAIN WindowContents */
  243.     End,  /* MAIN WindowObject */
  244.  
  245.     SubWindow, Objs[OID_APPUSING_WINDOW] = (APTR) WindowObject,
  246.       MUIA_Window_Title,       STR_Get(SID_APPS_USING_THIS_RES),
  247.       MUIA_Window_ID,          MAKE_ID('A','P','U','S'),
  248.       MUIA_Window_Width,       MUIV_Window_Width_Visible(80),
  249.       MUIA_Window_Height,      MUIV_Window_Height_Visible(80),
  250.       WindowContents, VGroup,
  251.         Child, Objs[OID_APPUSING_RESNAME] = TextObject,     
  252.           MUIA_ShortHelp,     STR_Get(SID_SHORTHELP_APPUSING_RESNAME),
  253.           MUIA_Text_PreParse, "\33c",
  254.           TextFrame,
  255.           MUIA_Background,    MUII_TextBack,
  256.         End,
  257.         Child, Objs[OID_APPUSING_LISTVIEW] = NListviewObject,
  258.           MUIA_ShortHelp,             STR_Get(SID_SHORTHELP_APPUSING_LIST),
  259.           MUIA_NListview_NList,       Objs[OID_APPUSING_LIST] = NListObject,
  260.             MUIA_ObjectID,            MAKE_ID('A','P','U','L'),
  261.             MUIA_NList_MultiSelect,   MUIV_NList_MultiSelect_None,
  262.             MUIA_NList_Input,         FALSE,
  263.             MUIA_NList_Title,         FALSE,
  264.             MUIA_NList_AutoVisible,   TRUE,
  265.             MUIA_NList_ConstructHook, MUIV_NList_ConstructHook_String,
  266.             MUIA_NList_DestructHook,  MUIV_NList_DestructHook_String,
  267.           End,  
  268.         End,  /* NListview object */
  269.         Child, Objs[OID_APPUSING_EXIT]     = MyKeyButton(STR_Get(SID_EXIT),'e', STR_Get(SID_SHORTHELP_EXIT)),
  270.       End,      
  271.     End,  /* APUS WindowObject */
  272.   End;  /* ApplicationObject */
  273.  
  274.   if (SysTrkApp)
  275.   {
  276.     DoMethod(SysTrkApp,
  277.       MUIM_Notify, MUIA_Application_DoubleStart, MUIV_EveryTime,
  278.       SysTrkApp, 2, MUIM_Application_ReturnID, OID_APP_DOUBLESTART );
  279.  
  280.     /* Main window */
  281.  
  282.     DoMethod(Objs[OID_MAIN_WINDOW], MUIM_Notify,
  283.       MUIA_Window_CloseRequest, TRUE, SysTrkApp, 2,
  284.       MUIM_Application_ReturnID, OID_MAIN_QUIT);
  285.     DoMethod(Objs[OID_MAIN_QUIT], MUIM_Notify,
  286.       MUIA_Pressed, FALSE, SysTrkApp, 2,
  287.       MUIM_Application_ReturnID, OID_MAIN_QUIT);
  288.     DoMethod(Objs[OID_MAIN_SAVE], MUIM_Notify,
  289.       MUIA_Pressed, FALSE, SysTrkApp, 2,
  290.       MUIM_Application_ReturnID, OID_MAIN_SAVE);
  291.     DoMethod(Objs[OID_MAIN_UPDATE], MUIM_Notify,
  292.       MUIA_Pressed, FALSE, SysTrkApp, 2,
  293.       MUIM_Application_ReturnID, OID_MAIN_UPDATE);
  294.     DoMethod(Objs[OID_MAIN_TRKMODE], MUIM_Notify,
  295.       MUIA_Cycle_Active, MUIV_EveryTime, SysTrkApp, 2,
  296.       MUIM_Application_ReturnID, OID_MAIN_TRKMODE);
  297.     DoMethod(Objs[OID_MAIN_TRACKERLISTVIEW], MUIM_Notify,
  298.       MUIA_NList_DoubleClick, MUIV_EveryTime, SysTrkApp, 2,
  299.       MUIM_Application_ReturnID, OID_MAIN_TRACKERLISTVIEW_DOUBLECLICK);
  300.     DoMethod(Objs[OID_MAIN_TRACKERLISTVIEW], MUIM_Notify,
  301.       MUIA_NList_Active, MUIV_EveryTime, SysTrkApp, 2,
  302.       MUIM_Application_ReturnID, OID_MAIN_TRACKERLISTVIEW_SINGLECLICK);
  303.     DoMethod(Objs[OID_MAIN_APPLISTVIEW], MUIM_Notify,
  304.       MUIA_NList_Active, MUIV_EveryTime, SysTrkApp, 2,
  305.       MUIM_Application_ReturnID, OID_MAIN_APPLISTVIEW_SINGLECLICK);
  306.  
  307.     /* Setup menus */
  308.  
  309.     DoMethod(MenuStrip, MUIM_SetUData,
  310.       OID_MAIN_MENU_CONTROL_TRACKUNUSEDRES,
  311.         MUIA_Menuitem_Checked, cfg_TrackUnusedResources);
  312.     DoMethod(MenuStrip, MUIM_SetUData,
  313.       OID_MAIN_MENU_CONTROL_SHOWUNUSEDRES,
  314.         MUIA_Menuitem_Checked, cfg_ShowUnusedResources);
  315.  
  316.     if (cfg_TrackUnusedResources)
  317.       GUI_Set_Menuitem_Enabled(OID_MAIN_WINDOW,
  318.         OID_MAIN_MENU_CONTROL_SHOWUNUSEDRES, TRUE);
  319.     else
  320.       GUI_Set_Menuitem_Enabled(OID_MAIN_WINDOW,
  321.         OID_MAIN_MENU_CONTROL_SHOWUNUSEDRES, FALSE);
  322.  
  323.     /* App resource window */
  324.  
  325.     DoMethod(Objs[OID_APPUSING_WINDOW], MUIM_Notify,
  326.       MUIA_Window_CloseRequest, TRUE, SysTrkApp, 2,
  327.       MUIM_Application_ReturnID, OID_APPUSING_EXIT);
  328.     DoMethod(Objs[OID_APPUSING_EXIT], MUIM_Notify,
  329.       MUIA_Pressed, FALSE, SysTrkApp, 2,
  330.       MUIM_Application_ReturnID, OID_APPUSING_EXIT);
  331.  
  332.     return TRUE;
  333.   }
  334.   else
  335.   {   
  336.     M_PrgError(STR_Get(SID_NO_APP_OBJECT), NULL);
  337.     return FALSE;
  338.   }
  339.   return TRUE;
  340. }
  341.  
  342. GPROTO void GUI_Destruct( void )
  343. {
  344.   /*********************************************************************
  345.    *
  346.    * GUI_Destruct()
  347.    *
  348.    * Free the entire GUI.
  349.    *
  350.    *********************************************************************
  351.    *
  352.    */
  353.  
  354.   if (SysTrkApp)
  355.   {
  356.     MUI_DisposeObject(SysTrkApp); SysTrkApp = NULL;
  357.   }
  358. }
  359.  
  360. GPROTO void GUI_EventHandler( void )
  361. {
  362.   /*********************************************************************
  363.    *
  364.    * GUI_EventHandler()
  365.    *
  366.    * Main event processing loop. This routine is really the core of the
  367.    * program. Primarily it handles MUI events and handles the IPC for
  368.    * the ARTL handler process.
  369.    *
  370.    *********************************************************************
  371.    *
  372.    */
  373.  
  374.   ULONG SelState = 0;
  375.   register BOOL Running = TRUE;
  376.  
  377.   while (Running) /* Main program loop */
  378.   {
  379.     /* And exec said: Let there be signals! :) */
  380.     
  381.     ULONG Sigs = 0, SigEvent = 0;
  382.   
  383.     switch(DoMethod(SysTrkApp, MUIM_Application_NewInput, &Sigs))
  384.     {
  385.       case OID_APP_DOUBLESTART:
  386.         set(SysTrkApp, MUIA_Application_Iconified, FALSE);
  387.         GUI_Popup("Information",
  388.           "SysTracker is already running!", NULL, "OK");
  389.         set(Objs[OID_MAIN_WINDOW], MUIA_Window_Activate, TRUE);
  390.         break;
  391.       
  392.       /**********      MAIN WINDOW       **********/
  393.  
  394.       case MUIV_Application_ReturnID_Quit:
  395.       case OID_MAIN_QUIT:
  396.         Running = FALSE; break;
  397.       case OID_MAIN_TRKMODE:
  398.         ACT_Main_TrackMode(); break;
  399.       case OID_MAIN_SAVE:
  400.         ACT_Main_Save(); break;
  401.       case OID_MAIN_UPDATE:
  402.         ACT_Main_Update(); break;
  403.       case OID_MAIN_TRACKERLISTVIEW_DOUBLECLICK:
  404.         ACT_Main_TrackerListview_DoubleClick(); break;
  405.       case OID_MAIN_TRACKERLISTVIEW_SINGLECLICK:
  406.         ACT_Main_TrackerListview_SingleClick(); break;
  407.       case OID_MAIN_APPLISTVIEW_SINGLECLICK:
  408.         ACT_Main_AppListview_SingleClick(); break;
  409.  
  410.       /**********   MAIN WINDOW MENUS    **********/
  411.  
  412.       case OID_MAIN_MENU_PROJECT_ABOUT:
  413.         ACT_Main_Menu_Project_About(); break;
  414.       case OID_MAIN_MENU_PROJECT_ABOUT_MUI:
  415.         ACT_Main_Menu_Project_About_MUI(); break;
  416.       case OID_MAIN_MENU_PROJECT_SETTINGS_MUI:
  417.         ACT_Main_Menu_Project_Settings_MUI(); break;
  418.       case OID_MAIN_MENU_PROJECT_HIDE:
  419.         ACT_Main_Menu_Project_Hide(); break;
  420.       case OID_MAIN_MENU_PROJECT_QUIT:
  421.         Running = FALSE; break;
  422.       case OID_MAIN_MENU_CONTROL_RESET:
  423.         ACT_Main_Menu_Control_Reset(); break;
  424.       case OID_MAIN_MENU_CONTROL_CLEARDEADAPPS:
  425.         ACT_Main_Menu_Control_ClearDeadApps(); break; 
  426.       case OID_MAIN_MENU_CONTROL_CLEARUNUSEDRES:
  427.         ACT_Main_Menu_Control_ClearUnusedRes(); break;
  428.  
  429.       case OID_MAIN_MENU_CONTROL_TRACKUNUSEDRES:
  430.       {
  431.         ULONG Checked = FALSE;
  432.         DoMethod(MenuStrip, MUIM_GetUData,
  433.           OID_MAIN_MENU_CONTROL_TRACKUNUSEDRES,
  434.           MUIA_Menuitem_Checked, &Checked);
  435.         ACT_Main_Menu_Control_TrackUnusedResources((BOOL)Checked);
  436.         break;
  437.       }
  438.       
  439.       case OID_MAIN_MENU_CONTROL_SHOWUNUSEDRES:
  440.       {
  441.         ULONG Checked = FALSE;
  442.         DoMethod(MenuStrip, MUIM_GetUData,
  443.           OID_MAIN_MENU_CONTROL_SHOWUNUSEDRES,
  444.           MUIA_Menuitem_Checked, &Checked);
  445.         ACT_Main_Menu_Control_ShowUnusedResources((BOOL)Checked);
  446.         break;
  447.       }
  448.       default: break;
  449.  
  450.       /**********   APP RESOURCE WINDOW   **********/
  451.  
  452.       case OID_APPUSING_EXIT:
  453.         set(Objs[OID_APPUSING_WINDOW], MUIA_Window_Open, FALSE );
  454.         break;
  455.     }
  456.  
  457.     if (Sigs && Running)
  458.     {
  459.       SigEvent = Wait(Sigs | SIGBREAKF_CTRL_C);
  460.       if (SigEvent & SIGBREAKF_CTRL_C) Running = FALSE;
  461.       if (ACT_SigEvent(SigEvent)) Running = FALSE;
  462.     }
  463.   } /* while() */
  464.  
  465.   set(Objs[ OID_MAIN_WINDOW ], MUIA_Window_Open, FALSE);
  466.   set(Objs[ OID_APPUSING_WINDOW ], MUIA_Window_Open, FALSE);
  467. }
  468.  
  469. /* Simple abstaction layer */
  470.  
  471. GPROTO ULONG GUI_Popup( UBYTE *Title, UBYTE *Body, void *BodyFmt,
  472.   UBYTE *Gads )
  473. {
  474.   /*********************************************************************
  475.    *
  476.    * GUI_Popup()
  477.    *
  478.    * Display a requester, with custom text & title. Will default to
  479.    * intuition.library for it's requester if MUIMasterBase has not yet
  480.    * been initialized.
  481.    *
  482.    *********************************************************************
  483.    *
  484.    */
  485.  
  486.   if (SysBase->LibNode.lib_Version < 36) return 0;
  487.  
  488.   /* Note: We can only use MUI functions on the context of the
  489.            creating task, in this case the main SysTracker process. */
  490.  
  491.   if (MUIMasterBase &&
  492.       (GUIProcess == (struct Process *) FindTask(NULL)))
  493.   {
  494.     return MUI_RequestA(SysTrkApp, Objs[OID_MAIN_WINDOW], 0,
  495.       Title, Gads, Body, BodyFmt);
  496.   }
  497.   else if (IntuitionBase)
  498.   {
  499.     /* This code executed when MUIMasterBase is not valid */
  500.  
  501.     struct EasyStruct EZ =
  502.     {
  503.       sizeof(struct EasyStruct),
  504.       0, NULL, NULL, NULL
  505.     };
  506.  
  507.     EZ.es_Title        = Title;
  508.     EZ.es_TextFormat   = Body;
  509.     EZ.es_GadgetFormat = Gads;
  510.  
  511.     /* Note: If window is NULL, then req will default to WB */
  512.  
  513.     return EasyRequestArgs(NULL, &EZ, NULL, BodyFmt);
  514.   }
  515.   else if (IntuitionBase = OpenLibrary("intuition.library", 36L))
  516.   {
  517.     /* This code executed when MUIMasterBase and IntuitionBase
  518.        aren't valid */
  519.     
  520.     ULONG r;    
  521.     struct EasyStruct EZ =
  522.     {
  523.       sizeof(struct EasyStruct),
  524.       0UL, NULL, NULL, NULL
  525.     };
  526.  
  527.     EZ.es_Title        = Title;
  528.     EZ.es_TextFormat   = Body;
  529.     EZ.es_GadgetFormat = Gads;
  530.     r = EasyRequestArgs(NULL, &EZ, NULL, BodyFmt);
  531.     CloseLibrary((struct Library *) IntuitionBase);
  532.     IntuitionBase = NULL;
  533.     return r;
  534.   }
  535.   else return 0; /* Pre-OS 36 don't see any requesters. */
  536. }
  537.  
  538. GPROTO ULONG GUI_Get_Cycle_Active( ULONG CycleID )
  539. {
  540.   ULONG CycVal = 0;
  541.   
  542.   get(Objs[CycleID], MUIA_Cycle_Active, &CycVal);
  543.  
  544.   return CycVal;
  545. }
  546.  
  547. GPROTO APTR GUI_Get_List_Entry( ULONG ListID, ULONG Index )
  548. {
  549.   APTR ListEntry = NULL;
  550.   
  551.   DoMethod(Objs[ListID], MUIM_NList_GetEntry, Index, &ListEntry);
  552.  
  553.   return ListEntry;
  554. }
  555.  
  556. GPROTO APTR GUI_Get_List_Active( ULONG ListID )
  557. {
  558.   APTR ListActive = 0;
  559.  
  560.   DoMethod(Objs[ListID],
  561.     MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &ListActive);
  562.  
  563.   return ListActive;
  564. }
  565.  
  566. GPROTO void GUI_Act_List_Clear( ULONG ListID )
  567. {
  568.   DoMethod(Objs[ListID], MUIM_NList_Clear);
  569. }
  570.  
  571.  
  572. GPROTO struct Screen *GUI_Get_ScreenPtr( void )
  573. {
  574.   struct Screen *Scr = NULL;
  575.   
  576.   get(Objs[OID_MAIN_WINDOW], MUIA_Window_Screen, &Scr);
  577.   
  578.   return Scr;
  579. }
  580.  
  581. GPROTO void GUI_Set_List_Active( ULONG ListID, ULONG Index )
  582. {
  583.   set(Objs[ListID], MUIA_NList_Active, Index);  
  584. }
  585.  
  586. GPROTO void GUI_Set_Text_Contents( ULONG TextID, UBYTE *Str )
  587. {
  588.   set(Objs[TextID], MUIA_Text_Contents, Str);
  589. }
  590.  
  591. GPROTO void GUI_Set_List_Quiet( ULONG ListID, BOOL State )
  592. {
  593.   set(Objs[ListID], MUIA_NList_Quiet, State);
  594. }
  595.  
  596. GPROTO void GUI_Act_Window_Open( ULONG WndID, BOOL State )
  597. {
  598.   set(Objs[WndID], MUIA_Window_Open, State);
  599. }
  600.  
  601. GPROTO void GUI_Act_AboutGUISystem( void )
  602. {
  603.   if (!Objs[OID_MAIN_MENU_PROJECT_ABOUT_MUI])
  604.   {
  605.     Objs[OID_MAIN_MENU_PROJECT_ABOUT_MUI] =
  606.       (Object *) AboutmuiObject,
  607.         MUIA_Window_RefWindow, Objs[OID_MAIN_WINDOW],
  608.         MUIA_Aboutmui_Application, SysTrkApp,
  609.       End;
  610.   }
  611.  
  612.   if (Objs[OID_MAIN_MENU_PROJECT_ABOUT_MUI])
  613.     set(Objs[OID_MAIN_MENU_PROJECT_ABOUT_MUI], MUIA_Window_Open, TRUE);
  614. }
  615.  
  616. GPROTO void GUI_Act_ConfigureGUISystem( void )
  617. {
  618.   DoMethod(SysTrkApp, MUIM_Application_OpenConfigWindow, 0L); 
  619. }
  620.  
  621. GPROTO void GUI_Set_App_Iconified( BOOL State )
  622. {
  623.   set(SysTrkApp, MUIA_Application_Iconified, State);
  624. }
  625.  
  626.  
  627. GPROTO BOOL GUI_OpenSaveReq( UBYTE *PathBuf, ULONG PathBufLen )
  628. {
  629.   struct Screen *Scr = GUI_Get_ScreenPtr();
  630.  
  631.   if (MUI_AslRequestTags(SaveReq,
  632.         ASLFR_Screen, Scr,
  633.         TAG_DONE))
  634.   {
  635.     strcpy(PathBuf, SaveReq->fr_Drawer);
  636.  
  637.     if (AddPart(PathBuf, SaveReq->fr_File, PathBufLen))
  638.       return TRUE;
  639.   }
  640.   return FALSE;
  641. }
  642.  
  643.  
  644. GPROTO void GUI_Act_List_InsertABC( ULONG ListID, APTR ListEntry )
  645. {
  646.   DoMethod(Objs[ListID], MUIM_NList_InsertSingle,
  647.     ListEntry, MUIV_NList_Insert_Sorted);
  648. }
  649.  
  650. GPROTO void GUI_Set_Menuitem_Enabled( ULONG WinID, ULONG MenuItemID,
  651.   BOOL NewState )
  652. {
  653.   if (WinID == OID_MAIN_WINDOW)
  654.     DoMethod(MenuStrip, MUIM_SetUData, MenuItemID,
  655.       MUIA_Menuitem_Enabled, NewState);
  656. }
  657.  
  658.  
  659.